<?php
namespace payment\utils;
use herosphp\core\Loader;

/**
 * 银行流水号生成工具
 * @author yangjian<yangjian102621@gmail.com>
 */
class SerialNumberUtils {

    /**
     * @param $prefix 流水号前缀
     * @return string
     */
    public static function generate($prefix='L') {

        $model = Loader::model('serialNumber');
        $model->writeLock(); //将数据表进行写锁定，禁止其他人读
        $item = $model->getItem(array('prefix' => $prefix));
        if ( $item && $item['auto_id'] < 99999999) {
            $autoId = $item['auto_id']+1;
        } else {
            $autoId = 1;
        }
        if ( $item['auto_id'] >= 99999999 ) {
            $model->unLock();
            E("今日流水已经超过1000万条，流水号爆表了.");
        }
        $model->replace(array('prefix' => $prefix, 'auto_id' => $autoId));
        $model->unLock();
        return $prefix.date('ymd').str_pad($autoId, 8, '0', STR_PAD_LEFT);

    }
}
